package threadDemo14;

public class Foodie extends Thread {
    @Override
    public void run() {
        /**
         1.判断桌子上是否有汉堡包。
         2.如果没有就等待。
         3.如果有就开吃
         4.吃完之后，桌子上的汉堡包就没有了
         叫醒等待的生产者继续生产
         汉堡包的总数量减一
         */

        // 套路:
        // 1.while(true)死循环
        // 2.synchronized 锁,锁对象要唯一
        // 3.判断,共享数据是否结束，结束
        // 4.判断,共享数据是否结束，没有结束
        while (true) {
            synchronized (Desk.lock) {
                // 判断桌子上是否有汉堡包。
                if (Desk.count == 0) {
                    // 没有就退出
                    break;
                } else {
                    if (Desk.flag) {
                        // 有就开吃
                        System.out.println("吃汉堡包");
                        // 吃完之后，桌子上的汉堡包就没有了
                        Desk.flag = false;
                        // 叫醒等待的生产者继续生产
                        Desk.lock.notifyAll();
                        // 总数量减一
                        Desk.count--;
                    } else {
                        // 没有就等待
                        // 使用什么对象当做锁,那么就必须用这个对象去调用等待和唤醒的方法
                        try {
                            Desk.lock.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                    }
                }
            }
        }
    }
}
